'''
生成器：是一个特殊的、既能产出值，又能接收值的迭代器。
若一个函数中包含了yield关键字，那它便成为了一个生成器。
'''

def myGenerator(all_nums):
    '''用生成器实现斐波那契数列'''
    pre_num, next_num = 0, 1
    count = 0
    while count < all_nums:
        ret = yield pre_num # 既产出值，又接收值
        if ret is not None: # ret 接收 send() 传过来的值。
            print("===> ret from send()：", ret)
        pre_num, next_num = next_num, pre_num + next_num
        count += 1

if __name__ == "__main__":
    ge = myGenerator(10)
    # 下述有两种调用 ge 值的方式
    """ # next(ge) | 通过 next() 产出 yield处 的值
    print('next ge:', next(ge))
    print('next ge:', next(ge)) """

    """ # ge.send() | 通过 send() 给 yield处 传递值
    # 规定，使用 send() 调用ge的值时，第一次必须传递None（因为第一次是返回yield右边的值）
    # print(ge.send(None)) 
    print(ge.send("jieTan_1"))
    print(ge.send("jieTan_2")) """